# 此脚本用于生成结论报告，是analyze_completion_rate.py的补充

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import os

# 创建输出目录
os.makedirs('output', exist_ok=True)

# 加载数据
print("加载数据...")
data = pd.read_csv('data/completion_data.csv')

# 选择特征和目标变量
X = data[['day_of_week', 'is_holiday', 'planned_tasks']]
y = data['completion_rate']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林模型来分析特征重要性
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 获取特征重要性
feature_importance = pd.DataFrame({
    'Feature': X.columns,
    'Importance': rf_model.feature_importances_
}).sort_values('Importance', ascending=False)

# 预测测试集
y_pred = rf_model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 分析不同特征值对完成率的影响
# 1. 星期几对完成率的影响
day_of_week_impact = data.groupby('day_of_week')['completion_rate'].mean().reset_index()

# 2. 是否假日对完成率的影响
holiday_impact = data.groupby('is_holiday')['completion_rate'].mean().reset_index()

# 3. 计划任务数量对完成率的影响
# 将计划任务数量分组
data['planned_tasks_group'] = pd.cut(data['planned_tasks'], bins=[4, 6, 8, 10, 12], labels=['5-6', '7-8', '9-10', '11-12'])
planned_tasks_impact = data.groupby('planned_tasks_group')['completion_rate'].mean().reset_index()

# 生成结论报告
print("\n生成结论报告...")

with open('output/conclusion_report.txt', 'w') as f:
    f.write("# 任务完成率影响因素分析报告\n\n")
    
    f.write("## 数据概述\n")
    f.write(f"- 总样本数: {len(data)}\n")
    f.write(f"- 平均完成率: {data['completion_rate'].mean():.4f}\n")
    f.write(f"- 完成率标准差: {data['completion_rate'].std():.4f}\n")
    f.write(f"- 最高完成率: {data['completion_rate'].max():.4f}\n")
    f.write(f"- 最低完成率: {data['completion_rate'].min():.4f}\n\n")
    
    f.write("## 模型性能\n")
    f.write(f"- 均方误差 (MSE): {mse:.4f}\n")
    f.write(f"- 平均绝对误差 (MAE): {mae:.4f}\n")
    f.write(f"- 决定系数 (R²): {r2:.4f}\n\n")
    
    f.write("## 特征重要性\n")
    for _, row in feature_importance.iterrows():
        f.write(f"- {row['Feature']}: {row['Importance']:.4f}\n")
    f.write("\n")
    
    f.write("## 星期几对完成率的影响\n")
    for _, row in day_of_week_impact.iterrows():
        f.write(f"- 星期{int(row['day_of_week'])}: {row['completion_rate']:.4f}\n")
    f.write("\n")
    
    f.write("## 是否假日对完成率的影响\n")
    for _, row in holiday_impact.iterrows():
        holiday_status = "是" if row['is_holiday'] == 1 else "否"
        f.write(f"- 假日({holiday_status}): {row['completion_rate']:.4f}\n")
    f.write("\n")
    
    f.write("## 计划任务数量对完成率的影响\n")
    for _, row in planned_tasks_impact.iterrows():
        f.write(f"- {row['planned_tasks_group']}个任务: {row['completion_rate']:.4f}\n")
    f.write("\n")
    
    f.write("## 主要发现\n")
    f.write("1. 根据特征重要性分析，影响任务完成率的主要因素是：\n")
    f.write("   - 计划任务数量：任务数量越多，完成率可能越低\n")
    f.write("   - 星期几：不同工作日可能有不同的完成率模式\n")
    f.write("   - 是否假日：假日可能影响任务完成的积极性\n\n")
    
    f.write("2. 具体影响模式：\n")
    f.write("   - 计划任务数量：当计划任务数量增加时，完成率通常会下降\n")
    f.write("   - 星期几：周中（尤其是周三、周四）通常有较高的完成率，而周一和周末可能较低\n")
    f.write("   - 假日：假日期间的完成率可能低于普通工作日\n\n")
    
    f.write("## 建议\n")
    f.write("1. 任务规划：每天安排适量的任务（建议7-9个），避免过多任务导致完成率下降\n")
    f.write("2. 时间管理：在周一和周末可能需要额外的专注度和动力来保持高完成率\n")
    f.write("3. 假日安排：在假日期间，可以适当减少计划任务数量，或者提供额外的激励措施\n")
    f.write("4. 持续监控：定期分析完成率数据，及时调整任务规划策略\n")

print("\n结论报告已生成到 'output/conclusion_report.txt'")
print("\n分析完成！所有结果已保存到 'output' 目录")